/**
 * 用户服务模块 - 管理用户登录、注册和信息
 */
import * as api from './api.js';
import storage from '@system.storage';

// 存储键
const USER_INFO_KEY = 'user_info';

/**
 * 用户登录
 * @param {string} username - 用户名
 * @param {string} password - 密码
 * @returns {Promise<Object>} 登录结果
 */
export async function login(username, password) {
    try {
        // 调用登录API
        const response = await api.post('/api/user/login', {
            username,
            password
        });
        
        if (response && response.success) {
            // 保存认证信息
            if (response.user) {
                api.saveAuthInfo(response.user.token || '', response.user.id || 0);
                
                // 保存用户信息到本地
                saveUserInfo(response.user);
                
                return {
                    success: true,
                    user: response.user
                };
            }
        }
        
        return {
            success: false,
            message: response.message || '登录失败'
        };
    } catch (error) {
        console.error('登录失败:', error);
        return {
            success: false,
            message: '登录请求失败，请检查网络连接'
        };
    }
}

/**
 * 保存用户信息到本地存储
 * @param {Object} userInfo - 用户信息
 */
export function saveUserInfo(userInfo) {
    if (!userInfo) return;
    
    storage.set({
        key: USER_INFO_KEY,
        value: JSON.stringify(userInfo)
    });
}

/**
 * 获取用户信息
 * @returns {Promise<Object>} 用户信息
 */
export async function getUserInfo() {
    try {
        // 先尝试从本地获取
        const userInfoStr = await storage.get({
            key: USER_INFO_KEY,
            default: ''
        });
        
        if (userInfoStr && userInfoStr.trim() !== '') {
            return JSON.parse(userInfoStr);
        }
        
        // 如果本地没有，且用户已认证，则从服务器获取
        if (await api.isAuthenticated()) {
            const userId = await api.getUserId();
            
            if (userId > 0) {
                const response = await api.get(`/api/user/${userId}`);
                
                if (response && response.success && response.user) {
                    // 保存到本地
                    saveUserInfo(response.user);
                    return response.user;
                }
            }
        }
        
        return null;
    } catch (error) {
        console.error('获取用户信息失败:', error);
        return null;
    }
}

/**
 * 用户退出登录
 */
export function logout() {
    // 清除认证信息
    api.clearAuthInfo();
    
    // 清除用户信息
    storage.delete({
        key: USER_INFO_KEY
    });
}

/**
 * 获取用户昵称
 * @returns {Promise<string>} 用户昵称
 */
export async function getUsername() {
    try {
        const userInfo = await getUserInfo();
        return userInfo ? userInfo.username : '游客';
    } catch (error) {
        console.error('获取用户昵称失败:', error);
        return '游客';
    }
}

/**
 * 获取用户级别
 * @returns {Promise<string>} 用户级别
 */
export async function getUserLevel() {
    try {
        const userInfo = await getUserInfo();
        return userInfo ? (userInfo.current_level || 'beginner') : 'beginner';
    } catch (error) {
        console.error('获取用户级别失败:', error);
        return 'beginner';
    }
}

/**
 * 检查用户是否已登录
 * @returns {Promise<boolean>} 是否已登录
 */
export async function isLoggedIn() {
    return await api.isAuthenticated();
} 